包名 com.maizi.player
@外部依赖库("../libs")
@外部动态库("../jniLibs")
@安卓资源("../res")
@导入Java("android.view.View")
@导入Java("android.util.AttributeSet")
@导入Java("android.content.Context")
@导入Java("com.mzplayer.utils.MediaData")
@导入Java("com.mzplayer.videoview.EasyVideoView")
@导入Java("com.mzplayer.videoview.VideoViewCallBack")
@导入Java("com.mzplayer.utils.*")
@附加权限(安卓权限.网络权限)
@附加权限(安卓权限.文件权限_读取)
@附加权限(安卓权限.文件权限_写入)
@附加清单.组件属性([[android:configChanges="orientation|screenSize|keyboardHidden|uiMode"]])
类 麦子播放器:可视化组件
	@code
	public #<麦子播放器>(android.content.Context context) {
        super(context);
    }
	@Override
    public EasyVideoView onCreateView(android.content.Context context) {
        EasyVideoView view = new EasyVideoView(context);
     view.setCallBack(new VideoViewCallBack() {
         @Override
         public void onTinyResumeClick() {
          #接管悬浮窗恢复按钮被单击();
         }

         @Override
         public void onTinyCloseClick() {
          #接管悬浮窗关闭按钮被单击();
         }

         @Override
         public void onNormalBackClick() {
         #普通界面返回按钮被单击();
         }

         @Override
         public void onFullBackClick() {
           #接管全屏界面返回按钮被单击();
         }

         @Override
         public void onFullKeyBackEvent(int action) {
          #接管全屏界面返回键事件(action);
         }

         @Override
         public void onToggleFull() {
         #切换全屏界面完毕();
		 
         }

         @Override
         public void onToggleFloat() {
          #切换悬浮窗完毕();
         }

         @Override
         public void onToggleNormal() {
           #切换普通界面完毕();
         }

         @Override
         public void onPreparing() {
          #开始加载();
         }

         @Override
         public void onPrepared(boolean err) {
          #加载完毕(err);
         }

         @Override
         public void onCompletion(boolean err) {
           #播放完毕(err);
         }

         @Override
         public void onLongTouchDown() {
          #播放器被长按();
         }

         @Override
         public void onLongTouchMove(int orientation) {
           #播放器被长按后滑动(orientation);
         }

         @Override
         public void onLongTouchUp() {
           #播放器被长按后弹起();
         }

      });
      return view;
    }
    @Override
    public EasyVideoView getView() {
        return (EasyVideoView) view;
    }
	@end

	/**
   注释：悬浮窗基本尺寸(最短的一边);尺寸:取绝对像素;   
   */
	方法 置悬浮窗尺寸(尺寸:整数)
		@code
      getView().setFloatSize(#尺寸);
      @end
	结束 方法

	/**
   注释：悬浮窗与屏幕边缘的距离;边距:取绝对像素;   
   */
	方法 置悬浮窗边距(边距:整数)
		@code
      getView().setFloatMargin(#边距);
      @end
	结束 方法

	/**
   注释：系数:默认为1,至少0.1以上,越大缩放比例越大   
   */
	方法 置悬浮窗缩放系数(系数:单精度小数)
		@code
      getView().setFloatScaleRatio(#系数);
      @end
	结束 方法

	/**
   注释：时间:默认300毫秒;   
   */
	方法 置悬浮窗动画时间(时间:整数)
		@code
      getView().setFloatAnimatorDuration(#时间);
      @end
	结束 方法

	/**
   注释：自定义控件列间距;★索引为要添加的位置:★0为右上方自定义控件栏(电池图标左边);★1为左下方自定义控件栏(播放按钮右边);★2为右下方自定义控件栏(全屏按钮左边);★间距:取绝对像素;★   
   */
	方法 置自定义控件间距(索引:整数,间距:整数)
		@code
      getView().setDiyLeftMargin(#索引, #间距);
      @end
	结束 方法

	/**
   注释：控件为开启悬浮窗后,添加到播放器原来所在位置的控件;默认为空;   
   */
	方法 置悬浮窗占位控件(控件:对象)
		@code
      getView().setHeir(#控件);
      @end
	结束 方法


	/**
   注释：索引为要添加的位置:★0为右上方自定义控件栏(电池图标左边);★1为左下方自定义控件栏(播放按钮右边);★2为右下方自定义控件栏(全屏按钮左边);★主控件:添加后显示在界面,支持标签图片按钮,控件大小和文字颜色自动适配(背景和按钮文字除外);★副控件:添加后自动适配高度背景,不为空则点击主控件后展示此控件,为空则仅添加主控件;★   
   */
	方法 添加自定义控件(索引:整数,主控件:对象,副控件:对象)
		@code
      getView().addOption(#索引, #主控件, #副控件);
      @end
	结束 方法


	/**
   注释：无副控件的自定义控件示例;★索引为要添加的位置:★0为右上方自定义控件栏(电池图标左边);★1为左下方自定义控件栏(播放按钮右边);★2为右下方自定义控件栏(全屏按钮左边);★   
   */
	方法 添加自定义切换悬浮窗按钮(索引:整数)
		@code
      getView().addToggleFloat(#索引);
      @end
	结束 方法



	/**
   注释：有副控件的自定义控件示例;★索引为要添加的位置:★0为右上方自定义控件栏(电池图标左边);★1为左下方自定义控件栏(播放按钮右边);★2为右下方自定义控件栏(全屏按钮左边);★控件:为显示在播放器上的自定义控件,传空会自动使用文本控件;   
   */
	方法 添加自定义倍速按钮(索引:整数,控件:对象)
		@code
      getView().addSpeed(#索引, #控件);
      @end
	结束 方法



	/**
   注释：有副控件的自定义控件示例;★索引为要添加的位置:★0为右上放自定义控件(电池图标左边);★1为左下方自定义控件(播放按钮右边);★2为右下方自定义控件(全屏按钮左边);★控件:为显示在播放器上的自定义控件,传空会自动使用文本控件;   
   */
	方法 添加自定义画面比例按钮(索引:整数,控件:对象)
		@code
      getView().addAspectRatio(#索引, #控件);
      @end
	结束 方法


	/**
   注释：比例:0为适应,1为拉伸,2为填充,3为16:9,4为4:3;   
   */
	方法 置画面比例(比例:整数)
		@code
      getView().setAspectRatio(#比例);
      @end
	结束 方法

	/**
   注释：有副控件的自定义控件示例;★索引为要添加的位置:★0为右上放自定义控件(电池图标左边);★1为左下方自定义控件(播放按钮右边);★2为右下方自定义控件(全屏按钮左边);★控件:为显示在播放器上的自定义控件,传空会自动使用文本控件;   
   */
	方法 添加自定义声道切换按钮(索引:整数,控件:对象)
		@code
      getView().addSoundTrack(#索引, #控件);
      @end
	结束 方法


	/**
   注释：空   
   */
	方法 取声道数量():整数
		@code
      return getView().getSoundTrackCount();
      @end
	结束 方法

	/**
   注释：添加一个控件作为封面,添加后可使用显示指定控件和隐藏指定控件控制显示和隐藏;   
   */
	方法 添加自定义封面控件(控件:对象)
		@code
      getView().addCoverView(#控件);
      @end
	结束 方法
	/**
   注释：添加一个控件到播放器顶部中间,添加后可使用显示指定控件和隐藏指定控件控制显示和隐藏;   
   */
	方法 添加自定义顶部提示控件(控件:对象)
		@code
      getView().addTopHintView(#控件);
      @end
	结束 方法
	/**
   注释：模式:0为软解;1为硬解;默认软解;   
   */
	方法 置解码模式(模式:整数)
		@code
      getView().setUsingMediaCodec(#模式 == 1);
      @end
	结束 方法
	/**
   注释：协议:0为UDP;1为TCP;默认UDP;   
   */
	方法 置RTSP流使用协议(协议:整数)
		@code
      getView().setRtspUsingTCP(#协议 == 1);
      @end
	结束 方法
	/**
   注释：索引: ★0为右上方所有自定义控件(电池图标左边);★1为左下方所有自定义控件(播放按钮右边);★2为右下方所有自定义控件(全屏按钮左边);★3为全屏按钮;★4为顶部所有控件;★5为底部所有控件;★6为最底部的进度条;★7为切换悬浮窗按钮;★8为倍速按钮;★9为画面比例按钮;★10为声道切换按钮;★11为字幕切换按钮;★12为字幕播放控件;★13为播放进度条;★可视:真为可视,假为隐藏;   
   */
	方法 置控件可视(索引:整数,可视:逻辑型)
		@code
      getView().setViewState(#索引, #可视);
      @end
	结束 方法
	/**
   注释：模式:★0为默认模式,★1为禁止快进(相关UI为显示状态但不响应快进,代码内不受影响),★2为禁止快进并隐藏所有相关UI,★3为不响应任何触摸事件并隐藏相关UI;   
   */
	方法 置播放器响应模式(模式:整数)
		@code
      getView().setPlayerModel(#模式);
      @end
	结束 方法
	/**
   注释：模式:★0为自动检测,★1为视频模式(显示进度条,右下方显示播放时间),★2为直播模式(隐藏进度条,在右下方显示直播中);   
   */
	方法 置播放模式(模式:整数)
		@code
      getView().setPlayModel(#模式);
      @end
	结束 方法

	/**
   注释：提示:传空或◆◆则隐藏,非空文字则显示;   
   */
	方法 置顶部提示文字(提示:文本)
		@code
      getView().setTopHintText(#提示);
      @end
	结束 方法

	/**
   注释：空   
   */
	方法 置播放标题(标题:文本)
		@code
      getView().setTitle(#标题);
      @end
	结束 方法

	/**
   注释：空   
   */
	方法 置加载提示(提示:文本)
		@code
      getView().setOpeningText(#提示);
      @end
	结束 方法

	/**
   注释：空   
   */
	方法 置缓冲提示(提示:文本)
		@code
      getView().setLoadingText(#提示);
      @end
	结束 方法
	/**
   注释：优化:真为开启,假为关闭;★开启可解决视频关键帧过少快进位置不准确的问题;★但超过60秒的高码率视频快进会出现卡顿;   
   */
	方法 置快进准确度优化(优化:逻辑型)
		@code
      getView().setUsingAccurateSeek(#优化);
      @end
	结束 方法
	/**
   注释：系数:默认为0.5,至少0以上,越大快进的越多,越小快进的越少;   
   */
	方法 置快进滑动系数(系数:单精度小数)
		@code
      getView().setSeekRadio(#系数);
      @end
	结束 方法
	/**
   注释：默认为开启,如需关闭请传假;   
   */
	方法 置自动播放(开启:逻辑型)
		@code
      getView().setAutoPlay(#开启);
      @end
	结束 方法
	/**
   注释：本地或网络视频★★如需反馈或下载最新版请加QQ群737094612   
   */
	方法 播放视频(标题:文本, 视频地址:文本)
		@code
      getView().openVideo(new MediaData(#标题,#视频地址,MediaData.NORMAL));
      @end
	结束 方法

	/**
   注释：多个请求头用\n分割;★例子A: ◆请求头A键: 请求头A值\n 请求头B键: 请求头B值◆;★例子B: ◆Referer: https://www.baidu.com\n Cookie: cookie值◆;★   
   */
	方法 播放含请求头视频(标题:文本, 视频地址:文本, 请求头:文本)
		@code
      getView().openVideo(new MediaData(#标题,#视频地址,MediaData.NORMAL,#请求头));
      @end
	结束 方法
	/**
   注释：传文件名即可   
   */
	方法 播放asset视频(标题:文本, 视频:文本)
		@code
      getView().openVideo(new MediaData(#标题,#视频,MediaData.ASSET));
      @end
	结束 方法
	/**
   注释：传文件名即可   
   */
	方法 播放raw视频(标题:文本, 视频:文本)
		@code
      getView().openVideo(new MediaData(#标题,#视频,MediaData.RAW));
      @end
	结束 方法

	/**
   注释：空   
   */
	方法 开始播放()
		@code
      getView().start();
      @end
	结束 方法

	/**
   注释：空   
   */
	方法 暂停播放()
		@code
      getView().pause();
      @end
	结束 方法

	/**
   注释：停止播放并重置播放器   
   */
	方法 停止播放()
		@code
      getView().release();
      @end
	结束 方法

	/**
   注释：-1为出现错误,0为闲置,1为视频源加载中,2为视频源加载成功,3为播放中,4为暂停中,5为播放完毕   
   */
	方法 取播放器状态():整数
		@code
      return getView().getPlayerState();
      @end
	结束 方法

	/**
   注释：单位为秒   
   */
	方法 取视频长度():长整数
		@code
      return getView().getDuration();
      @end
	结束 方法
	方法 取播放标题():文本
		@code
        MediaData mediaData = easyVideoView.getMediaData();
        if(mediaData!=null&&mediaData.getName()!=null) {
            return mediaData.getName();
        }
        return "";
    @end
	结束 方法
	方法 取播放地址():文本
		@code
        MediaData mediaData = getView().getMediaData();
        if(mediaData!=null&&mediaData.getPath()!=null) {
            return mediaData.getPath();
        }
        return "";
		@end
	结束 方法
	//设置屏幕常亮
	方法 置屏幕常亮(常亮:逻辑型) 
		code getView().setKeepScreenOn(常亮);
	结束 方法
	//单位:秒
	方法 取播放进度():长整数
		@code
        return getView().getCurrentPosition();
    @end
	结束 方法
	/**
   注释：单位为秒   
   */
	方法 置播放进度(进度:长整数)
		@code
      getView().seekTo(#进度);
      @end
	结束 方法
	/**
   注释：单位为秒   
   */
	/**
   注释：取值范围:0.25-2.0,建议递增0.25;   
   */
	方法 置播放倍速(倍速:单精度小数)
		@code
      getView().setSpeed(#倍速);
      @end
	结束 方法
	/**
   注释：一般用来在置播放倍速之前获取当前倍速   
   */
	方法 取播放倍速():单精度小数
		@code
      return getView().getSpeed();
      @end
	结束 方法
	/**
   注释：显示播放器界面,延时后隐藏;★隐藏延时:单位为毫秒,传0则一直显示;   
   */
	方法 显示播放器界面(隐藏延时:整数)
		@code
      getView().show(#隐藏延时);
      @end
	结束 方法
	/**
   注释：隐藏一直在显示的播放器界面   
   */
	方法 隐藏播放器界面()
		@code
      getView().hide();
      @end
	结束 方法
	/**
   注释：设置播放器被长按和长按后滑动时是否振动提示;★反馈:0为都不振动,1为长按时振动,2为长按和滑动指定距离时都振动,默认为0;★时间:单位为毫秒,越大振动强度和时长越大,建议设置25毫秒(轻微振动);★   
   */
	方法 置播放器长按振动反馈(反馈:整数,时间:整数)
		@code
      getView().setLongTouchFeedback(#反馈,#时间);
      @end
	结束 方法
	/**
   注释：播放器被长按后滑动指定间距后再回调滑动事件;★间距:默认为35dp(同取绝对像素(35));   
   */
	方法 置播放器长按后滑动回调间距(间距:整数)
		@code
      getView().setLongTouchMoveThreshold(#间距);
      @end
	结束 方法
	/**
   注释：可控制添加的自定义控件的显示;包括添加的封面;   
   */
	方法 显示指定控件(控件:对象)
		@code
      getView().showView(#控件);
      @end
	结束 方法
	/**
   注释：可控制添加的自定义控件的隐藏;包括添加的封面;   
   */
	方法 隐藏指定控件(控件:对象)
		@code
      getView().hideView(#控件);
      @end
	结束 方法
	/**
   注释：删除已添加的自定义控件;包括添加的封面;同一个控件删除后可再次添加;   
   */
	方法 删除指定控件(控件:对象)
		@code
      getView().remove(#控件);
      @end
	结束 方法
	/**
   注释：方向:0为横屏;1为竖屏;默认横屏;   
   */
	方法 置全屏方向(方向:整数)
		@code
      getView().setFullScreenOrientation(#方向);
      @end
	结束 方法
	/**
   注释：0为横屏;1为竖屏   
   */
	方法 取全屏方向():整数
		@code
      return getView().getFullScreenOrientation();
      @end
	结束 方法
	/**
   注释：0为普通;1为全屏;2为悬浮窗   
   */
	方法 取界面状态():整数
		@code
      return getView().getScreenState();
      @end
	结束 方法
	/**
   注释：空   
   */
	方法 切换普通界面()
		@code
      getView().toggleNormal();
      @end
	结束 方法
	/**
   注释：空   
   */
	方法 切换全屏界面()
		@code
      getView().toggleFull();
      @end
	结束 方法
	/**
   注释：有悬浮窗权限则直接切换悬浮窗,没有悬浮窗权限则申请悬浮窗权限;   
   */
	方法 切换悬浮窗()
		@code
      getView().toggleFloat();
      @end
	结束 方法
	/**
   注释：仅判断是否具有悬浮窗权限,返回真则有悬浮窗权限,返回假则没有悬浮窗权限;   
   */
	方法 取悬浮窗权限():逻辑型
		@code
      return getView().canFloat();
      @end
	结束 方法
	/**
   注释：小米手机有些版本默认禁止后台弹出界面权限造成此方法调用失败,所以添加此方法和悬浮窗按钮点击事件,有其他方式可自行实现;   
   */
	方法 返回播放窗口()
		@code
      getView().resumeActivity();
      @end
	结束 方法
	/**
   注释：启用接管后需要自行处理相关事件的响应;★索引:★1为接管悬浮窗恢复按钮被单击;★2为接管悬浮窗关闭按钮被单击;★3为接管全屏界面返回按钮被单击;★4为接管全屏界面返回键事件;★5为启用以上全部接管事件;★默认为0(即停用以上全部接管事件恢复默认事件响应);   
   */
	方法 启用接管事件(索引:整数)
		@code
      getView().setEventEnable(#索引);
      @end
	结束 方法
	/**
   注释：空   
*/
	定义事件  切换普通界面完毕()

	/**
   注释：空   
*/
	定义事件  切换悬浮窗完毕()
	/**
   注释：空   
*/
	定义事件  切换全屏界面完毕()
	/**
   注释：播放器被长按后弹起时回调;   
*/
	定义事件  播放器被长按后弹起()
	/**
   注释：播放器被长按后滑动时回调;★方向:0为向左,1为向上,2为向右,3为向下;   
*/
	定义事件  播放器被长按后滑动(方向:整数)
	/**
   注释：播放器被长按时回调;   
*/
	定义事件  播放器被长按()

	/**
   注释：空   
*/
	定义事件  普通界面返回按钮被单击()
	/**
   注释：需调用启用接管事件命令才可使用本事件;★如不启用则默认调用切换普通界面命令;   
*/
	定义事件  接管全屏界面返回键被按下()
	/**
   注释：需调用启用接管事件命令才可使用本事件;★如不启用则默认调用切换普通界面命令;   
*/
	定义事件  接管全屏界面返回按钮被单击()
	/**
   注释：需调用启用接管事件命令才可使用本事件;★如不启用则默认调用停止播放命令;   
*/
	定义事件  接管悬浮窗关闭按钮被单击()
	/**
   注释：需调用启用接管事件命令才可使用本事件;★如不启用则默认调用返回播放窗口和切换普通界面命令;★小米手机有些版本默认禁止后台弹出界面权限造成返回不了窗口,所以添加此事件,有其他方式可启用后自行实现;★   
*/
	定义事件  接管悬浮窗恢复按钮被单击()
	/**
   注释：仅在播放出错和播放完毕时回调;   
*/
	定义事件  播放完毕(是否出错:逻辑型)
	/**
   注释：仅在打开视频成功或失败时回调;如停用了自动播放可在这里执行播放;如添加了封面可在这里隐藏封面;   
*/
	定义事件  加载完毕(是否出错:逻辑型)
	/**
   注释：尝试打开视频链接时的回调,非缓冲回调;   
*/
	定义事件  开始加载()
	/**
   注释：需调用启用接管事件命令才可使用本事件;★如不启用则默认调用切换普通界面命令;★按键状态:0为返回键按下,1为返回键弹起;   
   */
	定义事件  接管全屏界面返回键事件(按键状态:整数)
结束 类